<?php

class Main extends TPage {

    public function onLoad($param) {
        parent::onLoad($param);
        if (!$this->IsPostBack) {
            $this->actualizarInterfaz();
        }
    }

    private function actualizarInterfaz() {
        $arr = $this->obtenerDatos();
        $this->iniciarControles($arr);
    }

    private function obtenerDatos() {
        $oCentro = new Centro();
        $oCentroBLL = new CentroBLL();
        $oCentro->setId(-1);
        $arrCentro = $oCentroBLL->listarCombo($oCentro);
        return $arrCentro;
    }

    private function iniciarControles($arr) {
        date_default_timezone_set(Util::ZONA_HORARIA);
        $this->txtFecha->Text = date("d/m/Y");
        $this->ddlCentro->DataSource = $arr;
        $this->ddlCentro->dataBind();
        $this->ddlCentro->Items->InsertAt(0, new TListItem("Seleccione Centro", "-1"));
        $this->txtPaciente->Attributes->Add("placeholder", "Buscar paciente");
        $this->ddlCentro->Attributes->Add("onchange", "mostrarLoading()");
        $this->txtEmail->Attributes->Add("type","email");
    }

    private function filtrarCalendario() {
        $fecha = $this->txtFecha->Text;
        date_default_timezone_set(Util::ZONA_HORARIA);
        $fecha = Util::isNull($fecha, date("d/m/Y"));
        $idPaciente = Util::isNull($this->Request['ctl0$cphMain$txtIdPaciente'], -1);
        $this->iniciarCalendario($this->ddlCentro->SelectedValue, $fecha, $idPaciente);
    }

    private function iniciarCalendario($idCentro, $fecha, $idPaciente) {
        if ($idCentro == -1) {
            $this->litCalendario->Text = "";
            return;
        }

        $oCentro = new Centro();
        $oCentroBLL = new CentroBLL();
        $oCentro = $oCentroBLL->obtenerPorId($idCentro);

        $calendario = "<div id='holderCalendario' style='position: relative; width: 100%; overflow-y: auto;'>
                        <table class='table table-hover table-condensed table-bordered table-striped' style='width: auto;'>
                            <thead>
                                <tr>
                                    <th style='width: 80px;'>AM</th>
                                    {#HORARIO_AM}
                                </tr>
                            </thead>
                                {#FILA_DOCTOR_AM}
                        </table>
                        <table class='table table-hover table-condensed table-bordered table-striped' style='width: auto;'>
                            <thead>
                                <tr>
                                    <th style='width: 80px;'>PM</th>
                                    {#HORARIO_PM}
                                </tr>
                            </thead>
                                {#FILA_DOCTOR_PM}
                        </table></div><br>";
        $calendario = str_replace("{#HORARIO_AM}", $this->generarHoraCabecera($fecha, $oCentro->getHoraInicioAM(), $oCentro->getHoraFinAM()), $calendario);
        $calendario = str_replace("{#HORARIO_PM}", $this->generarHoraCabecera($fecha, $oCentro->getHoraInicioPM(), $oCentro->getHoraFinPM()), $calendario);

        $oUsuario = new Usuario();
        $oUsuarioBLL = new UsuarioBLL();

        $oUsuario->setTipo(Usuario::TIPO_NUTRICIONISTA);
        $arrUsuarios = $oUsuarioBLL->listarPorTipo($oUsuario, $idCentro);

        $oReserva = new Reserva();
        $oReservaBLL = new ReservaBLL();
        $arrReserva = array();
        $filasNutricionistaAM = "";
        $filasNutricionistaPM = "";
        foreach ($arrUsuarios as $oUsuario) {
            $oReserva->setIdUsuario($oUsuario->getId());
            $oReserva->setFecha($fecha);
            $oReserva->setIdCentro($oCentro->getId());
            $oReserva->setIdPaciente($idPaciente);
            $arrReserva = $oReservaBLL->listar($oReserva);
            $filasNutricionistaAM .= $this->generarHoraDisponibilidad($fecha, $oCentro->getHoraInicioAM(), $oCentro->getHoraFinAM(), $oUsuario, $arrReserva, $idPaciente);
            $filasNutricionistaPM .= $this->generarHoraDisponibilidad($fecha, $oCentro->getHoraInicioPM(), $oCentro->getHoraFinPM(), $oUsuario, $arrReserva, $idPaciente);
        }

        $calendario = str_replace("{#FILA_DOCTOR_AM}", $filasNutricionistaAM, $calendario);
        $calendario = str_replace("{#FILA_DOCTOR_PM}", $filasNutricionistaPM, $calendario);

        $this->litCalendario->Text = $calendario;
    }

    private function generarHoraCabecera($fecha, $horaInicio, $horaTermino) {
        $fecha = date("m/d/Y") . " " . $horaInicio;
        $retorno = "";
        $hora = "";
        $continuar = true;

        while ($continuar) {
            $hora = date("H:i", strtotime($fecha));
            $retorno .= "<th style='width: 27px;'>" . $hora . "</th>";
            $fecha = date('m/d/Y H:i', strtotime("$fecha +15 minutes"));
            $hora = date("H:i", strtotime($fecha));
            if ($hora == $horaTermino) {
                $continuar = false;
            }
        }
        return $retorno;
    }

    private function generarHoraDisponibilidad($fecha, $horaInicio, $horaTermino, $oUsuario, $arrReserva, $idPaciente) {
        date_default_timezone_set(Util::ZONA_HORARIA);
        $arrFecha = explode("/", $fecha);        
        $fecha = $arrFecha[1] . "/" . $arrFecha[0] . "/" . $arrFecha[2];
        $fecha = date($fecha . " " . $horaInicio);
        $nombreCompleto = $oUsuario->getNombre() . ' ' . $oUsuario->getApellido();
        $retorno = "<tr><td alt='" . $nombreCompleto . "' title='" . $nombreCompleto . "'>" . $oUsuario->getNombreInicial() . "</td>";
        $bloques = 0;
        $reservaAux = new Reserva();
        if (count($arrReserva) == 0) {
            $oReservaAux = new Reserva();
            $arrReserva[] = $oReservaAux;
        }

        do {
            foreach ($arrReserva as $reserva) {
                if (date('Y-m-d H:i:s', strtotime($fecha)) == $reserva->getFecha()) {
                    $reservaAux = $reserva;
                }
            }

            if ($reservaAux->getId() > 0) {
                $bloques = $reservaAux->getBloques();
                while ($bloques > 0) {
                    //ID UNICO PARA EL TD
                    $idUnico = uniqid();

                    //OBTIENE AL PACIENTE DE LA RESERVA
                    $oPaciente = new Paciente();
                    $oPacienteBLL = new PacienteBLL();
                    $oPaciente = $oPacienteBLL->obtenerPorId($reservaAux->getIdPaciente());

                    //TEMPLATE CONTENIDO DE POPOVER
                    $templateContenido = "Nutricionista : <b>{#NUTRICIONISTA}</b><br>";
                    $templateContenido .= "Fecha : <b>{#FECHA}</b><br>";
                    $templateContenido .= "Duraci&oacute;n : <b>{#DURACION}</b> min<br>";                    
                    $templateContenido .= "<input class=\"btn btn-small btn-block btn-danger\" type=button onclick=cancelarReserva({#ID}) value=\"Cancelar reserva\" style=\"position: relative; margin-top: 10px;\" \/>";
                    $templateContenido = str_replace("{#NUTRICIONISTA}", $reservaAux->getNombre() . " " . $reservaAux->getApellido(), $templateContenido);
                    $templateContenido = str_replace("{#FECHA}", $reservaAux->getFechaFormateada(), $templateContenido);
                    $templateContenido = str_replace("{#DURACION}", $reservaAux->getBloques() * Reserva::TIEMPO_DURACION_MINUTOS, $templateContenido);                    
                    $templateContenido = str_replace("{#ID}", $reservaAux->getId(), $templateContenido);

                    //DIBUJA CELDA DE RESERVA
                    $retorno .= "<td class='reserva' style='background:{#COLOR_CELDA}' ";
                    $retorno .= "rel='popover' data-placement='bottom' title='Paciente: <b>{#TITULO}</b>' data-content='";
                    $retorno .= "<div style=\"position: relative; margin-left: 0px; height: 100px;\">{#CONTENIDO}</div>'";
                    $retorno .= "id='" . $idUnico . "' ";
                    //$retorno .= "onclick=\"popUpMostrar('{#ID_CONTROL}','{#TITULO}','{#CONTENIDO}')\"";
                    //$retorno .= "onmouseout=\"popUpOcultar('{#ID_CONTROL}')\"";
                    $retorno = str_replace("{#ID_CONTROL}", $idUnico, $retorno);
                    $retorno = str_replace("{#TITULO}", $oPaciente->getNombre() . " " . $oPaciente->getApellido(), $retorno);
                    $retorno = str_replace("{#CONTENIDO}", $templateContenido, $retorno);
                    $retorno = str_replace("{#COLOR_CELDA}", $reservaAux->getIdPaciente() == $idPaciente ? Reserva::COLOR_CELDA_ACTIVA_PACIENTE : Reserva::COLOR_CELDA_ACTIVA, $retorno);

                    $retorno .= "</td>";
                    $bloques--;
                    $fecha = date('m/d/Y H:i', strtotime("$fecha +15 minutes"));
                }
                $reservaAux = new Reserva();
            } else {
                date_default_timezone_set(Util::ZONA_HORARIA);
                $fecha = date('m/d/Y H:i', strtotime($fecha));
                $retorno .= "<td style='background:" . Reserva::COLOR_CELDA_LIBRE . "' onclick=\"mostrarReservaHora('" . $oUsuario->getId() . "','" . $oUsuario->getNombre() . " " . $oUsuario->getApellido() . "','" . date("Y-m-d H:i:s", strtotime($fecha)) . "','" . date("d/m/Y H:i", strtotime($fecha)) . " Hrs')\"></td>";
                $fecha = date('m/d/Y H:i', strtotime("$fecha +15 minutes"));
                $reservaAux = new Reserva();
            }
        } while (date("H:i", strtotime($fecha)) != $horaTermino);
        $retorno .= "</tr>";
        return $retorno;
    }

    public function ddlCentroSelectionChanged($param, $sender) {
        $this->filtrarCalendario();
    }

    public function btnFiltrarOnClick($param, $sender) {
        $this->filtrarCalendario();
    }
}
?>